<?php

// 相册 类

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use DB;
use Session;



class PhotosController extends Controller
{
	/**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */

	
	// 相册 列表 
	public function index( Request $request )
	{
        // 开始
        // 获取路由
        $route_array = request()->route()->getAction();
        $controller = explode("\\",$route_array['controller']);
        $result = explode("@",$controller[3]);
        // 控制器 	$result[0];
        // 方法 	$result[1];
        $auth_final = '';
        foreach( Session::get('auths') as $key=> $auth_info )
        {
            // 符合条件
            if( $auth_info['controller']==$result[0] && $auth_info['func']==$result[1] )
            {
                $auth_final = true;
                break;
            }else
            {
                $auth_final = false;
            }
        }
        // 权限验证失败
        if( !$auth_final )
        {
            return redirect('/')->with( ['authinfo'=>'没有此项权限'] );
        }
        // 结尾
		
		// 搜索关键字 没有 默认为空
		$keyword = $request -> input('keyword',"");
		if( empty($keyword) )
		{
			// 为空 说明没有搜索
			// 查询所有相册 每页20条数据
			$photos = DB::table('photos as p') 
						-> select( "p.*",'c.name as cname',DB::raw("case when p.status=1 then '普通' when p.status=2 then '已推荐' end as statusInfo ") )
						-> leftJoin('category as c','c.id','=','p.category_id')
						-> orderBy( 'id','desc' ) 
						-> paginate(20);
		}else
		{
				
			// 查询所有相册 每页20条数据
			$photos = DB::table('photos as p') 
						-> select( "p.*",'c.name as cname')
						-> leftJoin('category as c','c.id','=','p.category_id')
						-> Where('p.title','like','%'.$keyword.'%' ) 
						-> orderBy( 'id','desc' ) 
						-> paginate(20);
		}
		return view( 'photos.list',[ 'photos'=>$photos,'request'=>$keyword,'title'=>'相册列表' ] );
		
	}
	
	
	// 相册 创建 编辑 页面
    public function create( $photo_id='' )
    {
        // 开始
        // 获取路由
        $route_array = request()->route()->getAction();
        $controller = explode("\\",$route_array['controller']);
        $result = explode("@",$controller[3]);
        // 控制器 	$result[0];
        // 方法 	$result[1];
        $auth_final = '';
        foreach( Session::get('auths') as $key=> $auth_info )
        {
            // 符合条件
            if( $auth_info['controller']==$result[0] && $auth_info['func']==$result[1] )
            {
                $auth_final = true;
                break;
            }else
            {
                $auth_final = false;
            }
        }
        // 权限验证失败
        if( !$auth_final )
        {
            return redirect('/')->with( ['authinfo'=>'没有此项权限'] );
        }
        // 结尾
		// 获取 一级分类 图库
		$category = DB::table('category as c') 
						// 图库
						-> where('c.id','=',12 ) 
						-> first();
		if( $photo_id=='' )
		{
			// 创建
			return view( 'photos.add', [ 'category'=>$category,'title' => '添加相册'] );
		}else
		{
		
			// 编辑
			$photo_info = DB::table('photos')
								-> where('id', $photo_id)
								-> first();
			// 相册 分类 内容
			$category_path = $this::getPath( $photo_info->category_id );
			
			// 图片表 所有内容
			$all_pics = DB::table('photos_pic as pp')
							-> where('pp.photo_id','=',$photo_id)
							-> get();
			$pics_info = array();
			foreach( $all_pics as $key => $pic_info )
			{
				$pic = array();
				// 线上
				$str = str_replace("/images",config('app.imgPath')."/images",$pic_info->pic_url);
				$pic['pic_url']= $str;
				$pics_info[$key] = $pic;
			}
			return view( 'photos.add', [ 'category'=>$category,'title' => '修改相册', 'photo_info'=>$photo_info,'category_path'=>$category_path,'pics_info'=>$pics_info ] );
		}
		
    }
	
	// 获取 相册的 所有分类层级
	public static function getPath( $category_id='' ){
		// 分类信息
		$category_info = DB::table('category')
					->where( 'id','=',$category_id )
					->first();
		// 拼一个完整的path
		$category_info->path .=$category_id;
		// 转换成数组
		$category_arr=explode( '-',$category_info->path );
		// 清除无效值
		unset( $category_arr[0] );	
		$arr = array();
		foreach( $category_arr as $key=>$category_id )
		{
			$category_info = DB::table('category')->where( 'id','=',$category_id )->first();
			// 分类的 id 与 分类名
			$arr[$key]['category_name'] = $category_info->name;
			$arr[$key]['id'] = $category_info->id;
		}
		return $arr;
	}
	
	
	// 执行 相册 创建 编辑
    public function store( $photo_id='',Request $request )
    {
		
		$data = $request -> only( 'category','title','from','desc' );
		
		// 判断分类 
		// 分类 转成数组
		$data['category'] = explode( ',',$data['category'] );
		// 清除无效值
		unset($data['category'][0]);
		// 包含 -1 
		if( in_array( '-1',$data['category'] ) )
		{
			$this -> show_msg( '请将分类补充完整' );
		}
		foreach( $data['category'] as $key => $category_id )
		{
			// 最后一次为 父类id
			$data['category_id'] = $category_id;
		}
		unset( $data['category'] );
		
		$title_length=mb_strlen( $data['title'],'utf-8' );
		if( $title_length<1 )
		{
			$this->show_msg('请输入标题');
		}
		
		$from_length=mb_strlen( $data['from'],'utf-8' );
		if( $from_length<1 )
		{
			$this->show_msg('请输入来源');
		}
		
		$desc_length=mb_strlen( $data['desc'],'utf-8' );
		if( $desc_length<1 )
		{
			$this->show_msg('请输入描述');
		}
		
		if( $photo_id )
		{
			// 编辑
			// 上传了新图
			if( !empty( $_FILES ) )
			{
				// 删除 磁盘旧图
				$pics_info = DB::table('photos_pic')
								-> where( 'photo_id','=',$photo_id )
								-> get();
				foreach( $pics_info as $key => $pic_info )
				{
					// 线上
					$file = "../../image".$pic_info -> pic_url;
					// 文件 存在
					if( file_exists($file) )
					{
						// 删除 文件
						unlink( $file );	
					}
				}
				
				// 删除 表旧数据
				$del = DB::table('photos_pic')
							-> where('photo_id','=',$photo_id)
							-> delete();
				if( !$del )
				{
					$this->show_msg( '图片表旧数据删除失败' );
				}
				// 上传 相册 图片 返回 文件的存放路径
				$filename_arr = $this -> uploadPhotosPic( $_FILES );
				foreach( $filename_arr as $key => $file_path )
				{
					$new = array();
					if( $key==0 )
					{
						// 封面
						$new['status'] = 1;
					}
					$new['photo_id'] = $photo_id;
					$new['pic_url'] = $file_path;
					$new['desc'] = '';
					// 重新插入 图片表 数据
					DB::table('photos_pic')->insertGetId($new);
				}
				
				// 1. 主表
				$upd_res = DB::table('photos')
							-> where( 'id','=',$photo_id )
							-> update( $data );
				if( $upd_res )
				{
					$this->show_msg( '修改成功' );
				}else
				{
					$this->show_msg( '图片修改成功' );
				}
			
			}else
			{
				// 只修改了 主表信息
				// 1. 主表
				$upd_res = DB::table('photos')
							-> where( 'id','=',$photo_id )
							-> update( $data );
				if( !$upd_res )
				{
					$this->show_msg( '主表信息修改失败' );
				}
				
				$this->show_msg( '修改成功' );
				
			}
			
		}else
		{
			// 创建
			// 相册图片
			if( !empty( $_FILES ) )
			{
				// 上传 相册图片 返回 文件的存放路径
				$filename_arr = $this -> uploadPhotosPic( $_FILES );
			}else
			{
				$this->show_msg( '请上传相册图片' );
			}
			
			$data['admin_id']=Session::get('admin_id');
			$data['create_at']=date('Y-m-d H:i:s',time());
			// 1. 主表
			$insert_id = DB::table('photos')->insertGetId( $data );
			if( $insert_id )
			{
				foreach( $filename_arr as $key => $file_path )
				{
					$data = array();
					if( $key==0 )
					{
						// 封面
						$data['status'] = 1;
					}
					$data['photo_id'] = $insert_id;
					$data['pic_url'] = $file_path;
					$data['desc'] = '';
					// 2. 从表
					DB::table('photos_pic')->insertGetId($data);
				}
			}else
			{
				$this->show_msg( '主表添加失败' );
			}
			
			$this->show_msg( '相册添加成功' );
			
		}

		
    }   
	
	
	// 上传 相册 图片
	public function uploadPhotosPic( $Files )
	{
		// 日期 作为新建目录名
		$time = date('Y-m-d');
		// 线上 目标目录 
		$dir= "../../image/images/photos/".$time;
		// 检测 文件 或者 目录 是否存在
		if( !file_exists($dir) )
		{	
			// 创建 目录
			mkdir( $dir,0777,true );
		}
		
		$filename_arr = array();
		foreach( $Files as $key => $file_info )
		{
			// 文件名
			$fileName = $file_info['name'];
			// 后缀
			$ext = pathinfo( $fileName,PATHINFO_EXTENSION );
			if( !in_array( $ext,array('jpg','jpeg','png','gif') )  )
			{
				$this->show_msg( '请上传正确格式的图片' );
			}
		}
		
		foreach( $Files as $key => $file_info )
		{
			// 文件名
			$fileName = $file_info['name'];
			// 后缀
			$ext = pathinfo( $fileName,PATHINFO_EXTENSION );
			// 临时目录
			$srcDir = $file_info['tmp_name'];
			// 新的 文件名
			$newName = rand(1,1000000).".".$ext;
			// 移动成功
			$res = move_uploaded_file( $srcDir, $dir."/".$newName );
			$filename_arr[]="/images/photos/".$time."/".$newName;
		}
		
		// 返回文件路径 /images/photos/12242/2.jpg
		return $filename_arr;
		
	}
	
	
	// 批量 删除 评论
	public function delAll( Request $request )
	{
		
		// 包含 相册 id
		$data = $request -> except('_token');
		// 清除无效值
		unset($data['all'][0]);	
		
		// 1. 磁盘旧数据
		foreach( $data['all'] as $key=> $photo_id ) 
		{
			// 删除 磁盘旧图
			$pics_info = DB::table('photos_pic')
							-> where( 'photo_id','=',$photo_id )
							-> get();
			foreach( $pics_info as $key => $pic_info )
			{
				// 线上
				$file = "../../image".$pic_info -> pic_url;
				// 文件 存在
				if( file_exists($file) )
				{
					// 删除 文件
					unlink( $file );	
				}
			}
		}
		
		
		// 2. 图片表
		$res = DB::table('photos_pic')
					-> whereIn( 'photo_id',$data['all'] )
					-> delete();
		if( !$res )
		{
			$this -> show_msg('图片表数据删除失败');
		}
		
		
		// 3. 主表
		$res = DB::table('photos')
					-> whereIn( 'id',$data['all'] )
					-> delete();
		if( $res )
		{
			$this -> show_msg('删除成功');
		}
		$this -> show_msg('主表删除失败');
		
	
	}
	
	
	// 创建 编辑 相册 封面 描述页面
	public function addDesc( $photo_id='' )
	{
        // 开始
        // 获取路由
        $route_array = request()->route()->getAction();
        $controller = explode("\\",$route_array['controller']);
        $result = explode("@",$controller[3]);
        // 控制器 	$result[0];
        // 方法 	$result[1];
        $auth_final = '';
        foreach( Session::get('auths') as $key=> $auth_info )
        {
            // 符合条件
            if( $auth_info['controller']==$result[0] && $auth_info['func']==$result[1] )
            {
                $auth_final = true;
                break;
            }else
            {
                $auth_final = false;
            }
        }
        // 权限验证失败
        if( !$auth_final )
        {
            return redirect('/')->with( ['authinfo'=>'没有此项权限'] );
        }
        // 结尾
		// 图片表 所有内容
		$all_pics = DB::table('photos_pic as pp')
						-> where( 'pp.photo_id','=',$photo_id )
						-> get();
		$pics_info= array();
		foreach( $all_pics as $key => $pic_info )
		{
			$pic = array();
			$pic['id']= $pic_info->id;
			$pic['desc']= $pic_info->desc;
			$pic['status']= $pic_info->status;
			// 线上
			$str = str_replace("/images",config('app.imgPath')."/images",$pic_info->pic_url);
			$pic['pic_url']= $str;
			$pics_info[$key] = $pic;
		}
		// 创建
		return view( 'photos.desc', [ 'title' => '图片描述及封面设置' , 'pics_info'=>$pics_info , 'photo_id'=>$photo_id ] );
	
	}
	
	// 执行 修改 图片 描述信息
	public function updDesc( $photo_id='',Request $request )
	{
		
		$data = $request -> except('_token');
		if( empty($data['face']) )
		{
			$this -> show_msg('请选择封面');
		}
		
		// 根据 相册ID
		// 全部设为 不是封面
		DB::table('photos_pic')
					-> where( 'photo_id','=',$photo_id )
					-> update( ['status'=>2] );
							
		DB::table('photos_pic')
					-> where( 'id','=',$data['face'] )
					// 设为封面
					-> update( ['status'=>1] );
		
		
		// 按,分割
		$desc_info = explode( ',',rtrim( $data['desc'],',' ) );
		// 每个值包含着 图片ID 的 desc内容 3:这是图片描述
		foreach( $desc_info as $key => $desc_str )
		{
			// 按 : 分割
			$desc = explode( ':',$desc_str );
			// 图片ID
			$pic_id = $desc[0];
			$insert = array();
			// 图片 描述信息
			$insert['desc'] = $desc[1];
			$upd_res = DB::table('photos_pic')
							->where( 'id','=',$pic_id )
							->update( $insert );
		}
		
		$this -> show_msg('设置成功');
		
	}
	
	
	// 执行 修改相册 状态
	public function upStatus( $photo_id,Request $request )
	{
		// 包含状态
		$data = $request -> except('_token');
        $res  = DB::table('photos')
					-> where('id',$photo_id )
					-> update( $data );
		if($res)
		{
			// 修改成功
			$this -> show_msg('操作成功');
		}else
		{
			$this -> show_msg('操作失败');
		}
	}
	
	
}
